#include "list.h"

namespace gojo
{

    void test01 ()
    {

        list<int> l1 ;

        list<int> l2 ({1 , 2 , 3 , 4 , 5 , 6 , 7}) ;

        list<int> l3 (l2) ;

    }

    void test02 ()
    {

        list <int> l1 ;

        l1.push_back (2) ;

        l1.push_front (1) ;

        l1.insert (++(l1.begin ()) , 114514) ;

        for (auto e : l1)
        {

            cout << e << " " ;

        }

        cout << endl ;

    }

    void test03 ()
    {

        list<int> li ;

        li.push_back (1) ;

        li.push_back (2) ;
        
        li.push_back (3) ;

        li.push_back (4) ;

        li.push_back (5) ;

        li.push_back (6) ;

        li.push_back (7) ;

        for (auto e : li)
        {

            cout << e << " " ;

        }

        cout << endl ;

        li.pop_front () ;

        li.pop_back () ;

        for (auto e : li)
        {

            cout << e << " " ;

        }

        cout << endl ;

        li.erase (++li.begin ()) ;

        for (auto e : li)
        {

            cout << e << " " ;

        }

        cout << endl ;

        li.clear () ;
        
    }

    void test04 ()
    {

        list<int> li ;

        li.push_back (1) ;

        li.push_back (2) ;
        
        li.push_back (3) ;

        li.push_back (4) ;

        li.push_back (5) ;

        li.push_back (6) ;

        li.push_back (7) ;

        list<int> l1 = li ;

        for (auto e : l1)
        {

            cout << e << " " ;

        }

        cout << (l1.size ()) << endl ;

        list<int> l2 ;

        l2.swap (l1) ;

        for (auto e : l2)
        {

            cout << e << " " ;

        }

        cout << (l2.size ()) << endl ;

    }

    void test05 ()
    {

        list<int> l1 ({1 , 2 , 3 , 4 , 5 , 6 , 7}) ;

        auto it = l1.rbegin () ;

        while (it != l1.rend ())
        {

            cout << *it << " " ;

            ++it ;

        }

        cout << endl ;

    }

}

int main ()
{

    // gojo::test01 () ; // 测试函数的默认函数

    // gojo::test02 () ; // 测试函数的增加功能

    // gojo::test03 () ; // 测试函数的删除功能

    // gojo::test04 () ; // 测试函数的修改和查询功能功能

    gojo::test05 () ; // 测试函数的反向迭代器功能

    return 0 ;

}